﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Knihkupectvo.SpocitejCenu
{
    class Decorator : Komponenta
    {
        private Komponenta komponenta = null;

        protected string nazev = "";
        protected decimal cena = 0;

        protected Decorator (Komponenta komponenta)
        {
            this.komponenta = komponenta;
        }

        public override string getNazev()
        {
            return komponenta.getNazev();
        }

        public override decimal getCena()
        {
            return cena + komponenta.getCena();
        } 
    }

    class DarkoveBaleni : Decorator
    {
        public DarkoveBaleni(Komponenta komponenta)
            : base(komponenta)
        {
            this.cena = 50;
            this.nazev = "Darkove baleni";
        }
    }

    class Postovne : Decorator
    {
        const decimal hodnotaExpres = 1.2M;
        public bool EU { get; set; }
        public bool Expres { get; set; }
        public Postovne(Komponenta komponenta, bool expres, bool eu)
            : base(komponenta)
        {
            this.EU = eu;
            this.Expres = expres;
            this.cena = 100;
            if (EU)
            {
                this.cena += 150;
            }
            if (Expres)
            {
                this.cena *= hodnotaExpres;
            }
            this.nazev = "Postovne";
        }

    }
    
    class PlatbaCC : Decorator
    {
        public PlatbaCC(Komponenta komponenta)
            :base (komponenta)
        {
            this.cena = 50;
            this.nazev = "Platba kartou";
        }
    }
}
